import axios, { InternalAxiosRequestConfig, AxiosRequestConfig, AxiosResponse } from 'axios';
import { message } from "ant-design-vue";
// 创建 axios 实例
const apiClient = axios.create({
  // baseURL: 'http://127.0.0.1:3000/api',  // API 基础地址
  timeout: 10000,  // 超时设置
});

// 设置请求拦截器
apiClient.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');  // 获取 token
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 设置响应拦截器
apiClient.interceptors.response.use(
  (response: AxiosResponse) => {
    // 这里可以对响应数据进行处理
    // 比如检查是否存在自定义的成功字段
    if (response.data && response.data.status === 'success') {
      return response.data;  // 返回处理后的数据
    }
    const newToken = response.headers['new-token'];
    if (newToken) {
      localStorage.setItem('token', newToken); // 更新 Token
    }
    return response;  // 若不处理，返回原始响应
  },
  (error) => {
    // 处理错误响应
    if (error.response) {
      // 请求已发出，服务器返回了响应（包括错误状态码）
      if (error.response.status === 401) {
        // 如果 401 未授权错误，清除 token，并跳转到登录页（示例）
        // localStorage.removeItem('token');
        // window.location.href = '/login';  // 跳转到登录页面
        message.warning('当前无权限访问数据！');
      } else if (error.response.status === 403) {
        // 500 内部服务器错误
        message.warning('身份验证已经过期，请重新登录！');
      } else if (error.response.status === 500) {
        // 500 内部服务器错误
        message.error('服务器内部错误，请稍后再试');
      }
      // 其他错误
      console.error(`Error: ${error.response.status} - ${error.response.data}`);
    } else {
      // 请求未发出（可能是网络问题等）
      message.error('网络错误，请检查网络连接');
    }
    return Promise.reject(error);  // 继续抛出错误
  }
);

// 测试请求
const getData = async () => {
  try {
    const response = await apiClient.get('/data-endpoint');  // 你的 API 路径
    console.log('Data:', response);
  } catch (error) {
    console.error('Error:', error);
  }
};

//   getData();
export default apiClient